package tp.tecnicasdisenio.model.accion;

import java.util.ArrayList;
import java.util.Iterator;

import tp.tecnicasdisenio.dao.AlumnoDaoInterface;
import tp.tecnicasdisenio.dao.ConsultaDaoInterface;
import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.dao.impl.jdbc.ConsultaDao;
import tp.tecnicasdisenio.model.AccionInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Consulta;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.parser.ParserTituloConsultaTemaPrivada;

public class AccionReenviarConsultaPrivada  implements AccionInterface {
	private ParserTituloConsultaTemaPrivada parser;
	private MateriaDaoInterface materiaDao;
	private ConsultaDaoInterface consultaDao;
	private AlumnoDaoInterface alumnoDao;
	
	
	public AccionReenviarConsultaPrivada(){
	}
	
	public void setMateriaDao(MateriaDaoInterface materiaDao){
		this.materiaDao = materiaDao;
	}
	
	public void setConsultaDao(ConsultaDaoInterface consultaDao){
		this.consultaDao = consultaDao;
	}
	
	public void setAlumnoDao(AlumnoDaoInterface alumnoDao){
		this.alumnoDao = alumnoDao;
	}
	
	public void setParser(ParserTituloConsultaTemaPrivada parser){
		this.parser = parser;
	}
	
	public void reenviarConsultaADocentes(MailInterface mensaje,
			AutoRespondedorInterface autoRespondedor){
		
		String to = mensaje.getTo().get(0);
		Materia materia = this.materiaDao.getPorEmail(to);
		ArrayList<String> docentes = this.materiaDao.getEmailsDocentes(materia.getCodigo());
		
		Iterator<String> itEmailDocentes = docentes.iterator();
		while (itEmailDocentes.hasNext()){
			String emailDocente = itEmailDocentes.next();
			if (!emailDocente.trim().equals(mensaje.getFrom().trim())){
				System.out.println("se esta reenviando la consulta al docente: " + emailDocente);
				autoRespondedor.reenviarA(mensaje, emailDocente);
			}
		}
	}
	
	@Override
	public void aplicarSobre(MailInterface mensaje,
			AutoRespondedorInterface autoRespondedor) {
		
		this.reenviarConsultaADocentes(mensaje, autoRespondedor);
		this.enviarConsultaAAlumno(mensaje, autoRespondedor);
	}

	private void enviarConsultaAAlumno(MailInterface mensaje,
			AutoRespondedorInterface autoRespondedor) {
		Consulta consulta = this.consultaDao.getPorId(this.extraerTema(mensaje));
		
		Alumno alumno = this.alumnoDao.getPorId(consulta.getPadron());
		if (!alumno.getEmail().trim().equals(mensaje.getFrom().trim())){
			System.out.println("se esta reenviando la consulta al alumno: " + alumno.getNombre());
			autoRespondedor.reenviarA(mensaje, alumno.getEmail());
		}
	}
	
	private String extraerTema(MailInterface mail){
		this.parser.setMail(mail);
		return this.parser.getTema();
	}
}
